package com.literaryfamily.literaryfamily.service.log;

import com.literaryfamily.literaryfamily.entity.UserActions;
import com.literaryfamily.literaryfamily.model.ReturnResult;

import java.util.Date;

/**
 * 用来记录用户行为的接口
 * 所有涉及读写的方法都需要抛出 WriteError 数据库读写错误异常(这个是运行时异常,只需要抛出不需要处理)
 * 此接口所有方法均不检查用户身份,应该验证身份后在进行检查
 * @author 滑稽/因果报应
 */
public interface RecordService {
    /**
     * 记录用户行为开始时间
     *
     * @param userId 记录的用户
     * @param bookId 操作的书籍或者订单ID
     * @param type   行为类型：浏览、收藏、下单、支付等
     * @return 记录信息, 包括记录ID
     */
    ReturnResult<UserActions> userActionsStart(Long userId, Long bookId, int type);

    /**
     * 记录用户行为结束时间
     *
     * @param id 记录的行为
     * @return 记录结果
     */
    ReturnResult<UserActions> userActionsEnd(Long id);

    /**
     * 获取某条记录
     *
     * @param bookId    操作的ID
     * @param startTime 开始时间,如果为null默认为最近的
     * @param type      类型
     * @param userId    用户ID
     */
    ReturnResult<UserActions> getUserActions(Long userId, Long bookId, int type, Date startTime);

}